package br.unifor.escalonador.view;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.LayoutStyle.ComponentPlacement;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JLabel;
import javax.swing.JSlider;

import java.awt.Color;
import java.awt.Toolkit;

public class TelaIncial {

	private JFrame frmTelaInicial;
	public int quantidadecores;
	public int quantidadeprocessos;
	JSlider JsCore = new JSlider(JSlider.HORIZONTAL, 1, 64, 32);
	JSlider JsProcesso = new JSlider(JSlider.HORIZONTAL, 1, 256, 128);
	public int algoritimo;
	private int quantum =5;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					TelaIncial window = new TelaIncial();
					window.frmTelaInicial.setVisible(true);

				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public TelaIncial() {
		initialize();

	}

	/**
	 * Initialize the contents of the frame.
	 * 
	 * @return
	 */
	private void initialize() {

		frmTelaInicial = new JFrame();
		frmTelaInicial.setAutoRequestFocus(false);
		frmTelaInicial.getContentPane().setBackground(Color.GRAY);
		frmTelaInicial.setBackground(Color.GRAY);
		frmTelaInicial.setIconImage(Toolkit.getDefaultToolkit().getImage(
				"D:\\Projetos Unifor\\br.unifor.escalonador\\icon.jpg"));
		frmTelaInicial.setTitle("Tela Inicial");
		frmTelaInicial.setBounds(100, 100, 660, 500);
		frmTelaInicial.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frmTelaInicial.setVisible(true);
		//TODO
		JButton btnFIFO = new JButton("FIFO");
		btnFIFO.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
					quantidadecores = getQuantidadecores();
					quantidadeprocessos = getQuantidadeprocessos();
					setAlgoritimo(0);  //identificador do algoritimo FIFO
				new TelaEscalonamento(quantidadeprocessos,quantidadecores,algoritimo,quantum);

			}
		});

		JButton btnRoundRobin = new JButton("Round Robin");
		btnRoundRobin.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				quantidadecores = getQuantidadecores();
				quantidadeprocessos = getQuantidadeprocessos();
				setAlgoritimo(2);
				new TelaEscalonamento(quantidadeprocessos,quantidadecores,algoritimo,quantum);
				//new TelaEscalonamentoRR(quantidadecores, quantidadeprocessos);

			}
		});

		JButton btnFilaPrioridade = new JButton("Fila de Prioridade");
		btnFilaPrioridade.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				quantidadecores = getQuantidadecores();
				quantidadeprocessos = getQuantidadeprocessos();
				setAlgoritimo(2);
				//new TelaEscalonamento(quantidadecores, quantidadeprocessos, algoritimo);
			}
		});

		JButton btnSTF = new JButton("STF");
		btnSTF.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				quantidadecores = getQuantidadecores();
				quantidadeprocessos = getQuantidadeprocessos();
				setAlgoritimo(3);
				//new TelaEscalonamento(quantidadecores, quantidadeprocessos, algoritimo);
			}
		});

		JButton btnSJF = new JButton("SJF");
		btnSJF.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				quantidadecores = getQuantidadecores();
				quantidadeprocessos = getQuantidadeprocessos();
				setAlgoritimo(4);
				//new TelaEscalonamento(quantidadecores, quantidadeprocessos, algoritimo);
			}
		});

		JLabel lblQuantidadeDeCores = new JLabel("Quantidade de Cores");

		JLabel lblQuantidadeDeProcessos = new JLabel("Quantidade de Processos");
		JsCore.setMajorTickSpacing(7);
		JsCore.setMinorTickSpacing(1);
		JsCore.setPaintTicks(true);
		JsCore.setPaintLabels(true);
		JsCore.setSnapToTicks(true);

		JsProcesso.setMajorTickSpacing(63);
		JsProcesso.setMinorTickSpacing(1);
		JsProcesso.setPaintTicks(true);
		JsProcesso.setPaintLabels(true);
		JsProcesso.setSnapToTicks(true);

		GroupLayout groupLayout = new GroupLayout(
				frmTelaInicial.getContentPane());
		groupLayout
				.setHorizontalGroup(groupLayout
						.createParallelGroup(Alignment.LEADING)
						.addGroup(
								groupLayout
										.createSequentialGroup()
										.addContainerGap()
										.addGroup(
												groupLayout
														.createParallelGroup(
																Alignment.LEADING)
														.addComponent(
																btnFilaPrioridade)
														.addGroup(
																groupLayout
																		.createSequentialGroup()
																		.addGroup(
																				groupLayout
																						.createParallelGroup(
																								Alignment.LEADING)
																						.addComponent(
																								btnSJF)
																						.addComponent(
																								btnRoundRobin)
																						.addComponent(
																								btnFIFO)
																						.addComponent(
																								btnSTF))
																		.addPreferredGap(
																				ComponentPlacement.RELATED,
																				306,
																				Short.MAX_VALUE)
																		.addGroup(
																				groupLayout
																						.createParallelGroup(
																								Alignment.TRAILING,
																								false)
																						.addGroup(
																								groupLayout
																										.createSequentialGroup()
																										.addGroup(
																												groupLayout
																														.createParallelGroup(
																																Alignment.LEADING)
																														.addComponent(
																																JsProcesso,
																																GroupLayout.PREFERRED_SIZE,
																																189,
																																GroupLayout.PREFERRED_SIZE)
																														.addComponent(
																																JsCore,
																																GroupLayout.PREFERRED_SIZE,
																																186,
																																GroupLayout.PREFERRED_SIZE))
																										.addGap(46))
																						.addGroup(
																								groupLayout
																										.createSequentialGroup()
																										.addComponent(
																												lblQuantidadeDeCores)
																										.addGap(90))
																						.addGroup(
																								groupLayout
																										.createSequentialGroup()
																										.addComponent(
																												lblQuantidadeDeProcessos)
																										.addGap(76)))))
										.addContainerGap()));
		groupLayout
				.setVerticalGroup(groupLayout
						.createParallelGroup(Alignment.TRAILING)
						.addGroup(
								groupLayout
										.createSequentialGroup()
										.addGap(47)
										.addGroup(
												groupLayout
														.createParallelGroup(
																Alignment.LEADING)
														.addGroup(
																groupLayout
																		.createSequentialGroup()
																		.addComponent(
																				btnFIFO)
																		.addPreferredGap(
																				ComponentPlacement.RELATED)
																		.addComponent(
																				btnRoundRobin)
																		.addGap(13)
																		.addComponent(
																				btnFilaPrioridade)
																		.addGap(18)
																		.addComponent(
																				btnSTF)
																		.addGap(18)
																		.addComponent(
																				btnSJF))
														.addGroup(
																groupLayout
																		.createSequentialGroup()
																		.addComponent(
																				lblQuantidadeDeCores)
																		.addPreferredGap(
																				ComponentPlacement.RELATED)
																		.addComponent(
																				JsCore,
																				GroupLayout.PREFERRED_SIZE,
																				GroupLayout.DEFAULT_SIZE,
																				GroupLayout.PREFERRED_SIZE)
																		.addGap(81)
																		.addComponent(
																				lblQuantidadeDeProcessos)
																		.addPreferredGap(
																				ComponentPlacement.RELATED)
																		.addComponent(
																				JsProcesso,
																				GroupLayout.PREFERRED_SIZE,
																				GroupLayout.DEFAULT_SIZE,
																				GroupLayout.PREFERRED_SIZE)))
										.addGap(267)));
		frmTelaInicial.getContentPane().setLayout(groupLayout);

	}

	public void setQutidadedecores(int cores) {
		this.quantidadecores = cores;
	}

	public Integer getQuantidadecores() {
		return JsCore.getValue();
	}

	public void setQuantidadedeprocessos(int processos) {
		this.quantidadeprocessos = processos;
	}

	public Integer getQuantidadeprocessos() {
		return JsProcesso.getValue();
	}

	public int getAlgoritimo() {
		return algoritimo;
	}

	public void setAlgoritimo(int algoritimo) {
		this.algoritimo = algoritimo;
	}

}
